package com.zyk.grate_offer.class03;

import java.util.HashSet;

/**
 * 只由小写字母（a~z）组成的一批字符串
 * 都放在字符类型的数组String[] arr中
 * 如果其中某两个字符串所含有的字符种类完全一样
 * 就将两个字符串算作一类
 * 比如：baacbba和bac就算作一类
 * 返回arr中有多少类？
 *
 * @author zhangsan
 * @date 2021/4/28 9:24
 */
public class Code02_HowManyStr {

    // 获取每个字符的摘要， 只有小写字符， 可以用一个int表示一个字符的摘要信息。看有多少类
    public static int howMany(String[] strs) {
        HashSet<Integer> set = new HashSet<>();
        int digest;

        for (String str : strs) {
            digest = 0;
            for (int i = 0; i < str.length(); i++) {
                digest |= (1 << str.charAt(i) - 'a');
            }
            set.add(digest);
        }

        return set.size();
    }


    // for test
    public static void main(String[] args) {
        String[] strs = {
                "aaabbbccc", "abc", "aabbc",
                "bdc", "bcd",
                "efg",
                "dsadasdas",
                "jaskljdaskd"
        };
        System.out.println(howMany(strs));
    }

}
